#-*-coding:utf-8-*-
__author__ = 'toriycn'


from app.monitors.server.conf import  settings
from app.monitors.server.conf.services import generic
from app.utils import LogUtil

'''
   这个类主要是用来匹配主机组的配置，因为每台主机都有一个监控的模版。
   也就是监控哪些服务，这个是配置在templates里面的。
   存储在REDIS_KEY_TEMPLATEGROUP里面，设定了每种主机组监控的类型和数据

   然后，用户可以添加主机，到对应的模版组。
       hostgroup = [linuxCluster,MysqlCluster]

         templateGroup  = [{
            name = "linuxCluster"
            hosts:[]
            services:[]
         }]

   这里面保存的都是一些纯文本的数据项。服务项目在需要的时候，还需要再次初始化。
'''
class HostConfig:

    def __init__(self,main_intance):
        self.main = main_intance
        #模版组，设定每类型的机器监控的类型
        self.templateGroup = {}
        self.reloadConfig()

    def reloadConfig(self):
        #从redis中初始化数据
        templateGroup =   self.main.r.get(settings.REDIS_KEY_HOSTGROUP)
        redisHostConfig = None
        if templateGroup is not None:
            redisHostConfig = eval(templateGroup)

        if redisHostConfig is  None:
            return
        for key,item in redisHostConfig.items():
            baseTemplate = BaseTemplate()
            baseTemplate.name = item['name']
            baseTemplate.hosts = item['hosts']
            baseTemplate.services = item['services']
            self.templateGroup[key]=baseTemplate

    #添加主机服务组
    def addTemplateGroup(self,baseTemplate):
        if baseTemplate.name in self.templateGroup.keys():
            del self.templateGroup[baseTemplate.name]
        self.templateGroup[baseTemplate.name] = baseTemplate

    def clearhosts(self,templateName):
        self.templateGroup[templateName].hosts.clear()

    #添加主机
    def addHostToGroup(self,hostGroupName,hostIp):
        self.templateGroup[hostGroupName].hosts.append(hostIp)

    #添加服务，由于服务是个名字，如果需要实例时，需要通过generic进行初始化。
    def addServiceToGroup(self,hostGroupName,service):
        if hostGroupName in self.templateGroup:
           self.templateGroup[hostGroupName].services.append(service)
        return None

    def getMointorTemplate(self):
        returnValue = []
        for key,item in self.templateGroup.items():
            returnValue.append(item)
        return returnValue


    def getService(self,name):
        return generic.ServiceGeneric.getServiceByCode(name)

    def flushToRedis(self):
        saveTemplateGroupStr = {}
        LogUtil.logger.debug(self.templateGroup)
        for key,item in self.templateGroup.items():
           saveTemplateGroupStr[key] = {}
           saveTemplateGroupStr[key]["hosts"] = item.hosts
           saveTemplateGroupStr[key]["name"] = item.name
           saveTemplateGroupStr[key]["services"] = item.services

        self.main.r.set(settings.REDIS_KEY_HOSTGROUP,saveTemplateGroupStr)



class BaseTemplate(object):
    def __init__(self):
        self.name = 'your template name'
        self.hosts = []
        self.services = []


